package cn.zxh.csdn_maven.base.util;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.lang3.StringUtils;

public class StringUtil {

	private StringUtil(){
		
	}
	
	/**
	 * 删除lampStr中的key
	 * @param Str 需要删除的元素
	 * @param key 需要删除的元素key
	 * @return
	 */
	public static String reduceStrByKey(String str, String key){
		String[] lampArr = StringUtils.split(str, ",");
		List<String> lampList = new ArrayList<String>();
		for (String lampStr2 : lampArr) {
			if (lampStr2.equals(key)) {
				continue;
			}
			lampList.add(lampStr2);
		}
		str = "";
		for (String lampId : lampList) {
			str += lampId + ",";
		}
		if (StringUtils.isNoneBlank(str)) {
			str = str.substring(0, str.length() - 1);
		}
		return str;
	}
	public static List<String> getListFromStrBySeparatorChars(String str,String separatorChars){
		List<String> resultList = new ArrayList<String>();
		String[] strArr = StringUtils.split(str, separatorChars);
		for (Object temp : strArr) {
			resultList.add(temp.toString());
		}
		return resultList;
	}
	
	/**
	 * 通过模板将消息映射    
	 * eg: templet= "#{source}与#{target}冲突"  messageParams 中存在已source和target为key的内容将会替换
	 * 模板中#{source}和#{target}的内容。达到模板实例化
	 * @param messageParams 消息模板所需要填充的实际数据集合 
	 * @param templet 消息模板
	 * @return
	 */
	public static String getMessageFromTemplet(Map<String, Object> messageParams , String templet){
		//通过正则匹配模板中已#{}包裹的数据
		String regex = "([#]\\{[^\\}]*})";
		Pattern compile = Pattern.compile(regex);
		Matcher matcher = compile.matcher(templet);
		//通过模板填充的数据
		StringBuffer realMessage = new StringBuffer(); 
		while(matcher.find()){
			//进入循环此时数据必定是#{}格式的。
			Matcher matcherKey = Pattern.compile("[#]\\{([^\\}]*)}").matcher(matcher.group(1));
			//将从messageParams中获取的真实数据填充到载体中
			if(matcherKey.find()){
				//将在templet中匹配到的数据替换成真实数据在将此数据(包括之前的)赋值给realMessage
				matcher.appendReplacement(realMessage, messageParams.get(matcherKey.group(1)).toString());
			}
		}
		//将最后一次匹配后的信息追加进来。这样保证只有匹配到的数据被替换了。其他数据不变。
		matcher.appendTail(realMessage);
		return realMessage.toString();
	}
}
